//package cn.wuyu.baselibrary.mvvm;
//
//import com.test.MyLiveDataToViewModel.ui.viewModel.BaseViewModel;
//import com.test.MyLiveDataToViewModel.config.ApiFunction;
//import com.test.MyLiveDataToViewModel.http.RetrofitHelper;
//
//import java.util.concurrent.TimeUnit;
//
//import io.reactivex.FlowableTransformer;
//import io.reactivex.ObservableTransformer;
//import io.reactivex.android.schedulers.AndroidSchedulers;
//import io.reactivex.schedulers.Schedulers;
//
//public class BaseDataSource<M extends BaseViewModel> {
//
//    public M baseViewModel;
//
//    public BaseDataSource(M m) {
//        this.baseViewModel = m;
//    }
//
//    protected ApiFunction Http() {
//        return RetrofitHelper.getInstance().toApi(ApiFunction.class);
//    }
//
//    protected <T> T Http(Class<T> clz) {
//        return RetrofitHelper.getInstance().toApi(clz);
//    }
//
//    /**
//     * 从io流转到主线程
//     *
//     * @param <T>
//     * @return
//     */
//    protected <T> FlowableTransformer<T, T> f_io_main() {
//        return upstream ->
//                upstream.throttleFirst(500, TimeUnit.MILLISECONDS) //添加0.5秒防止重复
//                        .subscribeOn(Schedulers.io())
//                        .observeOn(AndroidSchedulers.mainThread());
//    }
//
//    /**
//     * 从io流转到主线程
//     *
//     * @param <T>
//     * @return
//     */
//    protected <T> FlowableTransformer<T, T> f_io_main_dialog() {
//        return upstream ->
//                upstream.throttleFirst(500, TimeUnit.MILLISECONDS) //添加0.5秒防止重复
//                        .subscribeOn(Schedulers.io())
//                        .observeOn(AndroidSchedulers.mainThread())
//                        .doOnSubscribe(disposable -> startLoading())
//                        .doFinally(this::dismissLoading);
//    }
//
//    /**
//     * 从io流转到主线程
//     *
//     * @param <T>
//     * @return
//     */
//    protected <T> ObservableTransformer<T, T> o_io_main() {
//        return upstream ->
//                upstream.throttleFirst(500, TimeUnit.MILLISECONDS) //添加0.5秒防止重复
//                        .subscribeOn(Schedulers.io())
//                        .observeOn(AndroidSchedulers.mainThread());
//    }
//
//    /**
//     * 从io流转到主线程
//     *
//     * @param <T>
//     * @return
//     */
//    protected <T> ObservableTransformer<T, T> o_io_main_dialog() {
//        return upstream ->
//                upstream.throttleFirst(500, TimeUnit.MILLISECONDS) //添加0.5秒防止重复
//                        .subscribeOn(Schedulers.io())
//                        .observeOn(AndroidSchedulers.mainThread())
//                        .doOnSubscribe(disposable -> startLoading())
//                        .doFinally(this::dismissLoading);
//    }
//
//
//    private void startLoading() {
//        if (baseViewModel != null) {
//            baseViewModel.startLoading("");
//        }
//    }
//
//    private void dismissLoading() {
//        if (baseViewModel != null) {
//            baseViewModel.dismissLoading();
//        }
//    }
//
//}
